#ifndef _LORA_H_
#define _LORA_H_

#include <stdint.h>

#define      LORA_DIO0_APBxClock_FUN       RCC_APB2PeriphClockCmd
#define      LORA_DIO0_CLK                  RCC_APB2Periph_GPIOB   
#define      LORA_DIO0_PORT                 GPIOB
#define      LORA_DIO0_PIN                  GPIO_Pin_2

typedef enum{
    LORA_IDLE = 0,      
    LORA_BUSY,  
    LORA_RX_DONE,   
    LORA_RX_TIMEOUT,
    LORA_TX_DONE,
    LORA_TX_TIMEOUT,
    LORA_ERROR,
}loraStatus;

void lora_module_init(void);

void lora_reset_pin_set_low(void);

void lora_reset_pin_set_high(void);

void lora_spi_nss_set_low(void);

void lora_spi_nss_set_high(void);

uint8_t lora_read_dio0_value(void);

uint8_t lora_spi_in_out(uint8_t outdata);

void lora_start_rx(void);

void lora_send_packet(uint8_t *buff, uint8_t len);

void lora_get_rx_packet(uint8_t *buff, uint16_t *len);

uint8_t get_lora_rssi(void);

uint8_t get_lora_snr(void);

loraStatus read_lora_status(void);

int get_loRa_module_vsion(void);

void lora_module_enter_sleep_mode(void);

#endif  /* lora.h */